裁剪分析 Sample详情

最后更新时间:2019年7月5日

裁剪分析,指按照用户指定的空间范围,形成裁剪框的边界(边界可以是任意多边形),按照该裁剪框对地图图层进行框内或框外的切取,即保留框内或框外的图形及相关属性信息,并把保留的图形及属性内容写到一个新的数据集中,尤其是对面域数据的裁剪操作,裁剪后还需重新组织图形数据的拓扑关系后再予以保存。

裁剪分析包括两种类型:内裁和外裁。内裁是裁剪结果保留为裁剪框边界之内的图形及相关属性;外裁是裁剪结果保留为裁剪框边界之外的图形及相关属性。

1

构建裁剪区

进行裁剪分析,首先需要构建裁剪要素和被裁剪要素,目前MapGIS Mobile提供的裁剪分析功能只支持利用区几何对象对其他要素进行裁剪,所以裁剪要素必须要求是区。裁剪要素和被裁剪要素的获取、构造方法同缓冲区分析中缓冲对象的获取方式一样,有三种方式,可参考对应内容。

//将视图坐标点转换为地图坐标点
MGSDot dot1=MGSDotMake(12720512.5, 3558317.2);
MGSDot dot2=MGSDotMake(12720358.6, 3561554.1);
MGSDot dot3=MGSDotMake(12723017.1, 3561615.5);
MGSDot dot4=MGSDotMake(12723074.1, 3559360.3);
//创建多边形图形对象
MGSGraphicPolygon *graphicPolygon=[[MGSGraphicPolygon alloc] init];
[graphicPolygon appendPoint:dot1];
[graphicPolygon appendPoint:dot2];
[graphicPolygon appendPoint:dot3];
[graphicPolygon appendPoint:dot4];
[graphicPolygon appendPoint:dot1];
[graphicPolygon setColor:[UIColor colorWithRed:0.0/255.0 green:0.0/255.0 blue:255.0/255.0 alpha:50.0/255.0]];
[graphicPolygon setBorderlineColor:[UIColor colorWithRed:255.0/255.0 green:153.0/255.0 blue:51.0/255.0 alpha:255.0/255.0]];
[graphicPolygon setBorderlineWidth:5];
[mapView.graphicsOverlay addGraphic:graphicPolygon];
//根据图形转换得到多边形几何对象,用于裁剪分析的裁剪区
MGSGeoPolygon *geoPolygon = (MGSGeoPolygon *)[MGSGraphic toGeometryWithGraphic:graphicPolygon];

2

获取被裁剪要素

获取被裁剪要素,在实际应用中常采用要素查询方式获取。

//查询
MGSFeaturePagedResult *queryResult=[featureQuery query];
NSArray<MGSFeature *> *featureArray=[queryResult getPageWithPageNumber:i];
//获取要素
MGSFeature *feature=featureArray[j];
//获取要素几何信息
MGSGeometry *geometry=[feature geometry];

3

裁剪分析

准备工作完成后,构造空间分析对象,然后调用clip方法进行裁剪分析,可以选择两种方法进行内裁剪或者外裁剪。裁剪之后的几何对象可以转换为MGSGraphic进行绘制,可参考缓冲分析部分。

//构造空间分析对象
MGSSpaAnalysis *clipAnalysis=[[MGSSpaAnalysis alloc] init];
//内裁(参数:被裁剪几何、裁剪区)
MGSGeometry *clipResultGeom=[clipAnalysis clip:geometry clipPoly:geoPolygon];
//裁剪(参数:被裁剪几何、裁剪区、裁剪类型 0/1-内裁/外裁)
MGSGeometry *clipResultGeom=[clipAnalysis clip:geometry clipPoly:geoPolygon flag:1];

重要说明:在进行裁剪分析时,SDK提供的接口中设置的默认容差值为0.0001,对于经纬度数据,需要传入合适的容差值,对于经纬度数据建议先调用tolerance属性设置0.000000001作为容差值。这样设置较小的容差值是为了避免将比较小的地图要素过滤处理掉了,保证裁剪分析结果的正确性。

内裁剪、外裁剪实现效果分别如下图所示:

内裁.jpg 外裁.jpg